a5_getCalendarEventDataJSON Function
Syntax
dim jsonData as c = a5_getCalendarEventDataJSON(defn as p)
Arguments
- defnPointer
An object that defines the data source, query, and the fields that contain the event data.
- typeCharacter
The type of query. Can be 'sql' or 'dbf'.
- connectionStringCharacter
The connection string to connect to the database. Can be a named connection or an ad-hoc connection string.
- tableNameCharacter
The name of the table that contains the event data or SQL query to retrieve the event information from the database.
- startDateCharacter
The start date for events. Specified using the format "YYYY-M-D" where YYYY is four digit year, M is a number representing the month, and D is the day of the month. E.g. '1993-1-1' or '2017-11-10'
- endDateCharacter
The end date for events. Specified using the format "YYYY-M-D" where YYYY is four digit year, M is a number representing the month, and D is the day of the month. E.g. '1993-1-31' or '2017-2-8'
- eventDateCharacter
The table column or field name from the SQL query that contains the event date.
- eventIdCharacter
The table column or field name from the SQL query that contains the event id.
- eventNameCharacter
The table column or field name from the SQL query that contains the event name.
- eventDescriptionCharacter
The table column or field name from the SQL query that contains the event description.
- filterCharacter
An optional filter. Used when specifying a table to fetch the data from.
- argumentsXMLCharacter
A string containing XML defining arguments used in the filter. argumentsXML is required if filter contains any arguments.
Returns
- jsonDataCharacter
A JSON object of dates with one or more events mapped to each date as an array of objects. Each event entry has the following properties:
- idNumeric
The event ID.
- nameCharacter
The event name.
- detailCharacter
A description of the event.
Description
Used in the UX Component for the Calendar Control to get events for a date range in the required JSON format.
Discussion
The a5_getCalendarEventDataJSON() function can be used to retreive data from a SQL or DBF data source to display in a Calendar control. The Calendar control requires data to be in the following format:
{ '2012-1-1' : [{id: 1, name: 'event1', detail: 'detail for event 1'}], '2012-1-5' : [ {id: 2, name: 'event2', detail: 'detail for event 2'}, {id: 3, name: 'event3', detail: 'detail for event 3'} ], '2012-1-12' : [ {id: 4, name: 'event4', detail: 'detail for event 4'}, {id: 5, name: 'event5', detail: 'detail for event 5'}, {id: 6, name: 'event6', detail: 'detail for event 6'}, {id: 7, name: 'event7', detail: 'detail for event 7'}, {id: 8, name: 'event8', detail: 'detail for event 8'}, {id: 9, name: 'event9', detail: 'detail for event 9'} ] }
where each date is a key with an array of event objects that define an id, name, and detail property.
Example: Data from a Table
Data can be retrieved from a specific table or using a SQL select statement. If the event data is contained in a single table, only the table name needs to be specified in the defn property. For example:
dim jsonData as c dim defn as p defn.type = "sql" defn.connectionString = "::Name::AADemo-Northwind" defn.tableName = "orders" defn.startDate = "1994-8-1" defn.endDate = "1994-8-31" defn.eventDate = "orderDate" defn.eventId = "orderId" defn.eventName = "orderDate" defn.eventDescription = "orderDate" jsonData = a5_getCalendarEventDataJSON(defn) showvar(jsonData)
Example: Using a SQL Select Statement
A SQL select statement can also be used to retrieve event data from a database. In the example below, the event name and description are created by building a concatentad string of data from the orders and customers table:
dim jsonData as c dim defn as p defn.type = "sql" defn.connectionString = "::Name::AADemo-Northwind" defn.tableName = <<%sql% SELECT orders.orderId as orderId, concatenate(orders.orderId, ': ', customers.companyName) as eventName, orders.orderDate as orderDate, concatenate('Order: ', orders.orderId, ': ', customers.contactName, ' ', customers.companyName) as eventDescription FROM orders orders INNER JOIN customers customers ON orders.customerId = customers.customerId %sql% defn.startDate = "1994-8-1" defn.endDate = "1994-8-31" defn.eventDate = "orderDate" defn.eventId = "orderId" defn.eventName = "eventName" defn.eventDescription = "eventDescription" jsonData = a5_getCalendarEventDataJSON(defn) showvar(jsonData)
Example: Specifying a Filter
You can define an optional filter and arguments used to retrieve data from the data source. In the example below, only orders from customers in France will be retrieved:
dim jsonData as c dim defn as p defn.type = "sql" defn.connectionString = "::Name::AADemo-Northwind" defn.startDate = "1994-8-1" defn.endDate = "1994-8-31" defn.eventDate = "orderDate" defn.eventId = "orderId" defn.eventName = "eventName" defn.eventDescription = "eventDescription" defn.tableName = <<%sql% SELECT orders.orderId as orderId, concatenate(orders.orderId, ': ', customers.companyName) as eventName, orders.orderDate as orderDate, concatenate('Order: ', orders.orderId, ': ', customers.contactName, ' ', customers.companyName) as eventDescription FROM orders orders INNER JOIN customers customers ON orders.customerId = customers.customerId %sql% defn.filter = "customers.country = :whatcountry" defn.argumentsXML = <<%xml% <SQLArguments> <SQLArgument> <Name>whatcountry</Name> <Data Type="C">France</Data> <IsNull Type="L">0</IsNull> <Usage>Input</Usage> </SQLArgument> </SQLArguments> %xml% jsonData = a5_getCalendarEventDataJSON(defn) showvar(jsonData)
You do not need to manually define the XML for the argumentsXML property. You can take advantage of the SQL::Arguments class to generate the XML. Simply add the arguments to a SQL::Arguments object using the Set Method. Once you have defined all the arguments used in your filter, you can get the XML representation of the arguments from the SQL::Arguments XML Property. For example:
dim args as sql::Arguments args.set("whatcountry","Brazil") args.set("whatcity","Rio de Janeiro") defn.argumentsXML = args.XML ? defn.argumentsXML = <SQLArguments> <SQLArgument> <Name>whatcountry</Name> <Data Type="C">Brazil</Data> <IsNull Type="L">0</IsNull> <Usage>Input</Usage> </SQLArgument> <SQLArgument> <Name>whatcity</Name> <Data Type="C">Rio de Janeiro</Data> <IsNull Type="L">0</IsNull> <Usage>Input</Usage> </SQLArgument> </SQLArguments>
Limitations
UX Component with Calendar Control Only
See Also